Este Este artículo proporciona dos ejemplos de cómo
utilizar el control ActiveX de Winsock instalado con el Microsoft
Office 2000 Developer Edition Tools.
Volver
al principio
El control Winsock le permite conectarse a unos
datos remotos de equipo y cambio entre equipos de cliente y
servidor. El control Winsock admite dos protocolos Protocolo de
control de transporte y Protocolo de datagramas de usuario.
TCP es un protocolo connection-based. Una analogía común
utilizada para describir TCP es aquél de un teléfono. En esta
analogía, los llamadores deben establecer una conexión en ambos
extremos de la línea telefónica antes que puedan intercambiar
información. Un equipo que utiliza TCP debe recibir confirmación del
equipo receptor que ha sido una conexión establecido antes de que
los dos equipos pueden transferir datos.
UDP es un protocolo
sin conexión. Una analogía común utilizada para describir UDP es
aquél de un radio. En esta analogía, un emisor de radio difunde su
señal sin saberse for sure si cualquiera está estando al escucha. Un
equipo que utiliza UDP envía datos y no requiere una conexión con el
equipo del extremo receptor de la transmisión.
Volver
al principio
Ejemplo 1 que utiliza el control ActiveX de
Winsock con TCP
Este ejemplo utiliza el mismo equipo para enviar y recibir datos.
Crea un formulario con tres controles Winsock. Uno de los controles
emula el entorno de cliente de equipo para enviar una solicitud de
conexión a un servidor. Los otros dos controles emulan el entorno en
un equipo servidor, un control escucha una solicitud de conexión:
otro acepta la solicitud cuando procede.
| 1. |
Cree una base de datos nueva llamada
WinsockDemo.mdb en blanco. |
| 2. |
Cree el formulario nuevo siguiente (no basado
en ninguna tabla o consulta) en vista Diseño: Form: TCPForm
---------------------------------
Caption: TCP Form
Command button:
Name: cmdListen
Caption: Listen
Command button:
Name: cmdConnect
Caption: Establish Connection
Command button:
Name: cmdSend
Caption: Send Data
Command button:
Name: cmdRespond
Caption: Respond
Command button:
Name: cmdClose
Caption: Close Connection
Text box:
Name: Text1
Label Caption: Data Received:
Winsock control:
Name: axWinsockListen
Winsock control:
Name: axWinsockClient
Winsock control:
Name: axWinsockServer
|
| 3. |
En el menú Ver, haga clic en Código. |
| 4. |
Escriba la línea siguiente en la sección
Declarations del módulo de clase del formulario: Dim wsListen, wsClient, wsServer As Winsock
|
| 5. |
Escriba los siguientes procedimientos
Para ilustrar cómo funciona el control Winsock entre
cliente y servidor de forma óptima, los procedimientos se
muestran en el orden en el que tienen lugar.Private Sub Form_Load()
' Set one server Winsock control and the client Winsock control
' when the form loads.
Set wsListen = Me!axWinsockListen.Object
Set wsClient = Me!axWinsockClient.Object
' Set the protocol for each control.
wsListen.Protocol = sckTCPProtocol
wsClient.Protocol = sckTCPProtocol
' Set the remote host on the client Winsock control. Because
' client and server are the same computer in this example, set
' RemoteHost equal to LocalIP.
wsClient.RemoteHost = wsListen.LocalIP
' Set a local and a remote port for the client.
wsClient.RemotePort = 100
wsClient.LocalPort = 99
' Set a local and a remote port for the server. Note that the
' server RemotePort is the client LocalPort and vice versa.
wsListen.LocalPort = 100
wsListen.RemotePort = 99
End Sub
Private Sub cmdListen_Click()
' Start the server listening for a connection request.
wsListen.Listen
Msgbox "Server is waiting for a connection request."
End Sub
Private Sub cmdConnect_Click()
' The client requests a connection with the server.
Msgbox "Client requested connection with server."
wsClient.Connect
End Sub
Private Sub axWinsockListen_ConnectionRequest(ByVal requestID As _
Long)
' When the server receives a connection request, set the second
' Winsock on the server to accept the request.
Set wsServer = Me!axWinsockServer.Object
wsServer.Protocol = sckTCPProtocol
' Accept the connection request.
wsServer.Accept requestID
Msgbox "Server accepted client connection request."
End Sub
Private Sub axWinsockClient_Connect()
' When the server accepts the connection request, the Connect
' event fires on the client. Display a message indicating success.
MsgBox "Connection Successful!"
End Sub
Private Sub cmdSend_Click()
' After a connection is established, use a command button to send
' data from client to server.
wsClient.SendData "Hello"
End Sub
Private Sub axWinsockServer_DataArrival(ByVal bytesTotal As Long)
Dim strClientMsg As String
' The DataArrival event fires on the server when the client sends
' information. Get the data and display it in a text box.
wsServer.GetData strClientMsg, vbString
Me!Text1.Value = strClientMsg
End Sub
Private Sub cmdRespond_Click()
' Send a message from the server to the client.
wsServer.SendData "Thanks for the message!"
End Sub
Private Sub axWinsockClient_DataArrival(ByVal bytesTotal As Long)
Dim strServerMsg As String
' The DataArrival event fires on the client when the server sends
' information. Get the data and display it in a text box.
wsClient.GetData strServerMsg
Me!Text1.Value = strServerMsg
End Sub
Private Sub cmdClose_Click()
' Close the server connections
wsServer.Close
wsListen.Close
Msgbox "Server connections closed."
End Sub
Private Sub axWinsockClient_Close()
' Close event on client fires after server closes connection.
' Close the client connection and display a message box.
wsClient.Close
MsgBox "Client connections closed. Good-Bye!"
End Sub
|
| 6. |
Guarde y cierre TCPForm. |
| 7. |
Abra TCPForm en vista Formulario y realice las
tareas siguientes:
| a. |
Haga clic en el botón Escuchar para
iniciar el servidor al escuchar una solicitud de
conexión.
Aparece para que lo noto que el mensaje
empaqueta aquél indique que el servidor se espera a una
conexión. |
| b. |
Haga clic en el botón Establish
Connection.
Tenga el cuadro de mensaje desde el
cliente que comprueba que la conexión fue correcta y el
cuadro de mensaje del servidor que comprueba que se
aceptó la solicitud en cuenta. |
| c. |
Haga clic en el botón Send Data y observe
que el mensaje de cliente "Hello" aparece en el cuadro
de texto del formulario. |
| d. |
Haga clic en el botón Responder y tenga
en cuenta que el mensaje de servidor "Gracias para el
mensaje" se muestra en el cuadro de texto. |
| e. |
Haga clic en el botón Close Connection y
tenga los cuadros de mensaje de cliente y servidor que
indica que se han cerrado las conexiones en
cuenta. | |
Volver
al principio
Ejemplo 2 que utiliza el control ActiveX de
Winsock con UDP
Este ejemplo utiliza el mismo equipo para enviar y recibir datos.
Crea un formulario con dos controles Winsock, uno de los controles
emula el equipo de cliente: el otro control emula el servidor.
| 1. |
Cree una base de datos nueva llamada
WinsockDemo.mdb en blanco o utilice la base de datos que creó
en el ejemplo anterior. |
| 2. |
Cree el formulario nuevo siguiente (no basado
en ninguna tabla o consulta) en vista Diseño: Form: UDPForm
--------------------------------
Caption: UDP Form
Command button:
Name: cmdSend
Caption: Send Data
Text box:
Name: Text1
Label Caption: Data Received:
Winsock control:
Name: axWinsockClient
Winsock control:
Name: axWinsockServer
|
| 3. |
En el menú Ver, haga clic en Código. |
| 4. |
Escriba la línea siguiente en la sección
Declarations del módulo de clase del formulario:Dim wsClient, wsServer As Winsock
|
| 5. |
Escriba los siguientes procedimientos
Para ilustrar cómo funciona el control Winsock entre
cliente y servidor de forma óptima, los procedimientos se
muestran en el orden en el que tienen lugar. Private Sub Form_Load()
' Set the control objects when the form loads.
Set wsClient = Me!axWinsockClient.Object
Set wsServer = Me!axWinsockServer.Object
' Set the protocol for client and server.
wsClient.Protocol = sckUDPProtocol
wsServer.Protocol = sckUDPProtocol
' Set the host and ports for client and server. Because client
' and server are the same computer in this example, set RemoteHost
' equal to LocalIP.
wsServer.RemoteHost = wsClient.LocalIP
wsServer.RemotePort = 1007
wsClient.Bind 1007
End Sub
Private Sub CmdSend_Click()
' Send a broadcast message from the server.
wsServer.SendData "Hello"
End Sub
Private Sub axWinsockClient_DataArrival(ByVal bytesTotal As Long)
Dim strServerMsg As String
' When a message arrives from the server, display it in a text
' box.
wsClient.GetData strServerMsg, vbString
Me!Text1.Value = strServerMsg
End Sub
|
| 6. |
Guarde y cierre el formulario UDPForm. |
| 7. |
Abra UDPForm en vista Formulario y haga clic en
el botón Send Data.
Observe que el cuadro de texto
muestra "Hello" Porque esto es una transmisión sin conexión,
no tiene que establecer una conexión cliente-servidor.
|
Volver
al principio